/**
 * 初始化配置表脚本
 *
 * @description 初始化 app_config 表，并从默认配置填充系统配置项
 */

import { readFile } from 'node:fs/promises'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
import { PrismaClient } from '@prisma/client'

const __dirname = dirname(fileURLToPath(import.meta.url))
const prisma = new PrismaClient()

// 保留：此前脚本包含若干通用工具函数，但当前版本未使用，已移除以通过 ESLint

/**
 * 初始化配置表
 */
async function initConfigTable() {
  try {
    console.log('🚀 开始初始化配置表...')

    // 读取默认配置
    const configPath = join(__dirname, '../src/main/config/index.ts')
    const configContent = await readFile(configPath, 'utf-8')

    // 简单提取默认配置（这里可以改进为更准确的解析）
    const defaultConfigMatch = configContent.match(/const\s+defaultConfig\s*:\s*AppConfig\s*=\s*\{[\s\S]*?\n\}/)
    if (!defaultConfigMatch) {
      throw new Error('无法从配置文件中提取默认配置')
    }

    // 创建一些重要的系统配置项
    const systemConfigs = [
      {
        config_key: 'proxy.enabled',
        config_value: 'false',
        config_type: 'boolean',
        category: 'proxy',
        description: '是否启用代理功能',
        is_public: true,
        is_system: true,
      },
      {
        config_key: 'proxy.validation.enabled',
        config_value: 'true',
        config_type: 'boolean',
        category: 'proxy',
        description: '是否启用代理校验',
        is_public: true,
        is_system: true,
      },
      {
        config_key: 'proxy.rotate_on_errors',
        config_value: JSON.stringify(['ip_lock_512', '429', '403', '407', 'ERR_TUNNEL_CONNECTION_FAILED', 'ECONNRESET', 'ETIMEDOUT', 'ENOTFOUND', '512-E-0044']),
        config_type: 'array',
        category: 'proxy',
        description: '触发代理轮换的错误码列表',
        is_public: true,
        is_system: true,
      },
      {
        config_key: 'logging.log_level',
        config_value: 'INFO',
        config_type: 'string',
        category: 'logging',
        description: '日志级别',
        is_public: true,
        is_system: true,
      },
      {
        config_key: 'network.request_timeout_seconds',
        config_value: '20',
        config_type: 'number',
        category: 'network',
        description: 'HTTP请求超时时间（秒）',
        is_public: true,
        is_system: true,
      },
    ]

    // 检查表是否存在配置
    const existingCount = await prisma.app_config.count()

    if (existingCount === 0) {
      console.log('📝 插入系统默认配置...')

      for (const config of systemConfigs) {
        await prisma.app_config.create({ data: config })
      }

      console.log(`✅ 已插入 ${systemConfigs.length} 个系统配置项`)
    }
    else {
      console.log(`ℹ️ 配置表已存在 ${existingCount} 个配置项，跳过初始化`)
    }

    console.log('🎉 配置表初始化完成')
  }
  catch (error) {
    console.error('❌ 初始化配置表失败:', error)
    process.exit(1)
  }
  finally {
    await prisma.$disconnect()
  }
}

// 运行初始化
initConfigTable()
